/**
 * @(#)RecursosHumanosDAOFactory.java Feb 20, 2007
 *
 * Copyright (c) 2005-2010 Psiqueware S.A. de C.V. All Rights Reserved.
 * This software is the proprietary information Psiqueware S.A. de C.V.
 * Use is subject to license terms.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * <br/>Usuario : Psique
 * <br/>Creaci&oacute;n: Feb 20, 2007 - 10:20:55 AM
 * <br/>
 * <br/>
 * <br/><t5>Cambios :</t5>
 * <br/><b>Fecha | Autor  |  Cambios</b>
 * <ul>
 * <li>Feb 20, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Psique</a> | Creaci&oacute;n del Objeto.</li>
 *
 * </ul>
 */

package com.psiqueware.jazmin.empresas.recursos.humanos.dao;

import com.psiqueware.alheli.dao.BaseDAOFactory;
import com.psiqueware.alheli.dao.TipoDAO;
import com.psiqueware.alheli.logging.Logger;
import com.psiqueware.alheli.logging.LoggerFactory;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.fake.AsignacionDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.fake.CategoriaEmpleoDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.fake.ContratoDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.fake.EmpleadoDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.fake.EstatusLaboralDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.fake.RazonSueldoDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.fake.SueldoDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.fake.TipoContratoDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.fake.TipoEmpleoDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.hbm.AsignacionDAOHbmA;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.hbm.CategoriaEmpleoDAOHbmA;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.hbm.ContratoDAOHbmA;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.hbm.EmpleadoDAOHbmA;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.hbm.EstatusLaboralDAOHbmA;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.hbm.RazonSueldoDAOHbmA;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.hbm.SueldoDAOHbmA;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.hbm.TipoContratoDAOHbmA;
import com.psiqueware.jazmin.empresas.recursos.humanos.dao.hbm.TipoEmpleoDAOHbmA;

/**
 * Fabrica de objetos DAO para el modulo de Empleados.
 * <br/>Paquete Original: com.psiqueware.tulipan.empresas.empleados.dao
 * <br/>Nombre  Original: EmpleadosDAOFactory
 * <br/><a href="RecursosHumanosDAOFactory.java.html"><i>Ver C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@PsiqueWare.com">Psique</a>
 * @version Revision: 1.1 Feb 20, 2007 10:20:55 AM
 * @noinspection OverlyCoupledClass
 */
public class RecursosHumanosDAOFactory extends BaseDAOFactory
{


    /** Logger de clase para RecursosHumanosDAOFactory */
    private static final Logger s_log = LoggerFactory.getLogger ( RecursosHumanosDAOFactory.class );


    /** Constructor de DAOFactory. Esta clase no puede instanciarse, es una utiler&iacute;a est&aacute;tica. */
    private RecursosHumanosDAOFactory ()
    {
    }

    /** Objeto de operaciones CRUD para Contrato. */
    private static ContratoDAO s_daoContrato;


    /**
     * Devuelve una instancia del dao para Contrato.
     *
     * @return ContratoDAO para operaciones CRUD.
     */
    public static synchronized ContratoDAO findDAOContrato ()
    {
        if ( s_daoContrato == null )
        {

            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoContrato = new ContratoDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoContrato = new ContratoDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_ANNOTATIONS ) )
            {
                s_daoContrato = new ContratoDAOHbmA ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoContrato = new ContratoDAOHbmC ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoContrato = new ContratoDAOOracle ();
            }
            else if ( m_tipo.equals ( TipoDAO.DERBY ) )
            {
                //s_daoContrato = new ContratoDAODerby ();
            }

            if ( s_daoContrato == null )
            {
                String error = "No se encontr&oacute; un dao de Contrato correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoContrato;
    }

    /** Objeto de operaciones CRUD para Asignacion. */
    private static AsignacionDAO s_daoAsignacion;


    /**
     * Devuelve una instancia del dao para Asignacion.
     *
     * @return AsignacionDAO para operaciones CRUD.
     */
    public static synchronized AsignacionDAO findDAOAsignacion ()
    {
        if ( s_daoAsignacion == null )
        {

            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoAsignacion = new AsignacionDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoAsignacion = new AsignacionDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_ANNOTATIONS ) )
            {
                s_daoAsignacion = new AsignacionDAOHbmA ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoAsignacion = new AsignacionDAOHbmC ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoAsignacion = new AsignacionDAOOracle ();
            }
            else if ( m_tipo.equals ( TipoDAO.DERBY ) )
            {
                //s_daoAsignacion = new AsignacionDAODerby ();
            }

            if ( s_daoAsignacion == null )
            {
                String error = "No se encontr&oacute; un dao de Asignacion correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoAsignacion;
    }

    /** Objeto de operaciones CRUD para Empleado. */
    private static EmpleadoDAO s_daoEmpleado;


    /**
     * Devuelve una instancia del dao para Empleado.
     *
     * @return EmpleadoDAO para operaciones CRUD.
     */
    public static synchronized EmpleadoDAO findDAOEmpleado ()
    {
        if ( s_daoEmpleado == null )
        {

            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoEmpleado = new EmpleadoDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoEmpleado = new EmpleadoDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_ANNOTATIONS ) )
            {
                s_daoEmpleado = new EmpleadoDAOHbmA ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoEmpleado = new EmpleadoDAOHbmC ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoEmpleado = new EmpleadoDAOOracle ();
            }
            else if ( m_tipo.equals ( TipoDAO.DERBY ) )
            {
                //s_daoEmpleado = new EmpleadoDAODerby ();
            }

            if ( s_daoEmpleado == null )
            {
                String error = "No se encontr&oacute; un dao de Empleado correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoEmpleado;
    }

    /** Objeto de operaciones CRUD para EstatusLaboral. */
    private static EstatusLaboralDAO s_daoEstatusLaboral;


    /**
     * Devuelve una instancia del dao para EstatusLaboral.
     *
     * @return EstatusLaboralDAO para operaciones CRUD.
     */
    public static synchronized EstatusLaboralDAO findDAOEstatusLaboral ()
    {
        if ( s_daoEstatusLaboral == null )
        {

            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoEstatusLaboral = new EstatusLaboralDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoEstatusLaboral = new EstatusLaboralDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_ANNOTATIONS ) )
            {
                s_daoEstatusLaboral = new EstatusLaboralDAOHbmA ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoEstatusLaboral = new EstatusLaboralDAOHbmC ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoEstatusLaboral = new EstatusLaboralDAOOracle ();
            }
            else if ( m_tipo.equals ( TipoDAO.DERBY ) )
            {
                //s_daoEstatusLaboral = new EstatusLaboralDAODerby ();
            }

            if ( s_daoEstatusLaboral == null )
            {
                String error = "No se encontr&oacute; un dao de EstatusLaboral correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoEstatusLaboral;
    }

    /** Objeto de operaciones CRUD para RazonSueldo. */
    private static RazonSueldoDAO s_daoRazonSueldo;


    /**
     * Devuelve una instancia del dao para RazonSueldo.
     *
     * @return RazonSueldoDAO para operaciones CRUD.
     */
    public static synchronized RazonSueldoDAO findDAORazonSueldo ()
    {
        if ( s_daoRazonSueldo == null )
        {

            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoRazonSueldo = new RazonSueldoDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoRazonSueldo = new RazonSueldoDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_ANNOTATIONS ) )
            {
                s_daoRazonSueldo = new RazonSueldoDAOHbmA ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoRazonSueldo = new RazonSueldoDAOHbmC ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoRazonSueldo = new RazonSueldoDAOOracle ();
            }
            else if ( m_tipo.equals ( TipoDAO.DERBY ) )
            {
                //s_daoRazonSueldo = new RazonSueldoDAODerby ();
            }

            if ( s_daoRazonSueldo == null )
            {
                String error = "No se encontr&oacute; un dao de RazonSueldo correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoRazonSueldo;
    }

    /** Objeto de operaciones CRUD para Sueldo. */
    private static SueldoDAO s_daoSueldo;


    /**
     * Devuelve una instancia del dao para Sueldo.
     *
     * @return SueldoDAO para operaciones CRUD.
     */
    public static synchronized SueldoDAO findDAOSueldo ()
    {
        if ( s_daoSueldo == null )
        {

            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoSueldo = new SueldoDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoSueldo = new SueldoDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_ANNOTATIONS ) )
            {
                s_daoSueldo = new SueldoDAOHbmA ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoSueldo = new SueldoDAOHbmC ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoSueldo = new SueldoDAOOracle ();
            }
            else if ( m_tipo.equals ( TipoDAO.DERBY ) )
            {
                //s_daoSueldo = new SueldoDAODerby ();
            }

            if ( s_daoSueldo == null )
            {
                String error = "No se encontr&oacute; un dao de Sueldo correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoSueldo;
    }

    /** Objeto de operaciones CRUD para TipoContrato. */
    private static TipoContratoDAO s_daoTipoContrato;


    /**
     * Devuelve una instancia del dao para TipoContrato.
     *
     * @return TipoContratoDAO para operaciones CRUD.
     */
    public static synchronized TipoContratoDAO findDAOTipoContrato ()
    {
        if ( s_daoTipoContrato == null )
        {

            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoTipoContrato = new TipoContratoDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoTipoContrato = new TipoContratoDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_ANNOTATIONS ) )
            {
                s_daoTipoContrato = new TipoContratoDAOHbmA ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoTipoContrato = new TipoContratoDAOHbmC ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoTipoContrato = new TipoContratoDAOOracle ();
            }
            else if ( m_tipo.equals ( TipoDAO.DERBY ) )
            {
                //s_daoTipoContrato = new TipoContratoDAODerby ();
            }

            if ( s_daoTipoContrato == null )
            {
                String error = "No se encontr&oacute; un dao de TipoContrato correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoTipoContrato;
    }

    /** Objeto de operaciones CRUD para TipoEmpleo. */
    private static TipoEmpleoDAO s_daoTipoEmpleo;


    /**
     * Devuelve una instancia del dao para TipoEmpleo.
     *
     * @return TipoEmpleoDAO para operaciones CRUD.
     */
    public static synchronized TipoEmpleoDAO findDAOTipoEmpleo ()
    {
        if ( s_daoTipoEmpleo == null )
        {

            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoTipoEmpleo = new TipoEmpleoDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoTipoEmpleo = new TipoEmpleoDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_ANNOTATIONS ) )
            {
                s_daoTipoEmpleo = new TipoEmpleoDAOHbmA ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoTipoEmpleo = new TipoEmpleoDAOHbmC ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoTipoEmpleo = new TipoEmpleoDAOOracle ();
            }
            else if ( m_tipo.equals ( TipoDAO.DERBY ) )
            {
                //s_daoTipoEmpleo = new TipoEmpleoDAODerby ();
            }

            if ( s_daoTipoEmpleo == null )
            {
                String error = "No se encontr&oacute; un dao de TipoEmpleo correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoTipoEmpleo;
    }

    /** Objeto de operaciones CRUD para CategoriaEmpleo. */
    private static CategoriaEmpleoDAO s_daoCategoriaEmpleo;


    /**
     * Devuelve una instancia del dao para CategoriaEmpleo.
     *
     * @return CategoriaEmpleoDAO para operaciones CRUD.
     */
    public static synchronized CategoriaEmpleoDAO findDAOCategoriaEmpleo ()
    {
        if ( s_daoCategoriaEmpleo == null )
        {
            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoCategoriaEmpleo = new CategoriaEmpleoDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoCategoriaEmpleo = new CategoriaEmpleoDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_ANNOTATIONS ) )
            {
                s_daoCategoriaEmpleo = new CategoriaEmpleoDAOHbmA ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoCategoriaEmpleo = new CategoriaEmpleoDAOHbmC ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoCategoriaEmpleo = new CategoriaEmpleoDAOOracle ();
            }
            else if ( m_tipo.equals ( TipoDAO.DERBY ) )
            {
                //s_daoCategoriaEmpleo = new CategoriaEmpleoDAODerby ();
            }

            if ( s_daoCategoriaEmpleo == null )
            {
                String error = "No se encontr&oacute; un dao de CategoriaEmpleo correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoCategoriaEmpleo;
    }
}